package huawei.od;

import java.util.Scanner;

/**
 * 【需要打开多少监视器】
 * 某长方形停车场，每个车位上方都有对应监控器
 * 当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时，监控器才需要打开
 * 给出某一时刻停车场的停车分布，请统计最少需要打开多少个监控器
 * 「输入描述」
 * 第一行输入m，n表示长宽，满足 1<m,n<=20
 * 后面输入m行，每行有n个0或1的整数，整数间使用一个空格隔开，表示该行已停车情况
 * 其中0表示空位，1表示已停
 * 「输出描述」
 * 最少需要打开监控器的数量
 *
 * 示例：
 * 【输入】
 * 3 3
 * 0 0 0
 * 0 1 0
 * 0 0 0
 * 【输出】
 * 5
 *
 * @author syzsn
 */
public class HowManyMonitors {
    public static int[][] directions = {{-1,0},{1,0},{0,1},{0,-1}};

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 行列 数
        int row = in.nextInt();
        int column = in.nextInt();

        // 实际停车位值
        int[][] matrix = new int[row][column];
        for(int i=0;i<row;i++){
            for(int j=0;j<column;j++){
                matrix[i][j] = in.nextInt();
            }
        }

        int result = 0;
        for(int x=0;x<row;x++){
            for(int y=0;y<column;y++){
                // 1 表示已停，开启监控，继续循环
                if(matrix[x][y] == 1){
                    result++;
                    continue;
                }
                // 前后左右存在 1 开启监控
                for (int i=0;i<4;i++){
                    int new_x = x + directions[i][0];
                    int new_y = y + directions[i][1];

                    if(new_x >= 0 && new_x < row
                            && new_y >=0 && new_y < column
                            && matrix[new_x][new_y] == 1
                    ){
                        result++;
                        break;
                    }
                }
            }
        }
        System.out.println(result);
        return;
    }
}
